// //知道了如何获取输入中的数字，字符，那么如何获取字符串呢？在c/c++中，需要包含头文件<string>,用法等同于int定义
//
// //判断字符串是否回文
// #include<iostream>
// #include<string>
// using namespace std;
//
// bool isPalindrome(string& str) {      //这里的&相当于引用，就是把int main里的函数调用一起共享同一个内存
//     //就是当用户输入字符串的时候函数（string& str）这里已经同步做出判断了，效率更高，当然，去掉&也没事
//     for (int left = 0, right = str.size() - 1 ; left < right ; left++ , right-- ) {//左右相向双指针
//                                                              //左指针右移 右指针左移
//         if (str[left] != str[right]) {
//             return false;//不是回文串
//         }
//     }
//     return true;//是回文串
// }
// int main() {
//     string input;
//     cin >> input;
//     if (isPalindrome(input))cout<<"yes\n";
//     else cout<<"no\n";
//     system("pause");
//     return 0;
// }


//数字统计
// #include<iostream>
// using namespace std;

// int main() {
//     int L,R;                //定义区间长度
//     cout<<"Enter The Length of the File , two number: ";
//     cin>>L>>R;
//     int count=0;
//     for (int i = L; i <= R; i++) {      //遍历区间[L,R]
//         int num = i;                    //定义一个等效于i的数不影响i的循环
//         while (num != 0) {              //当i不等于0的时候可以进行数字统计
//             int digit = num % 10;
//             if (digit == 2)
//                 count++;
//             num = num / 10;
//         }
//     }
//     cout<<"The number '2' arise count is:"<<count<<endl;
//     system("pause");
//     return 0;
// }

// #include<iostream>
// using namespace std;
//
// int cnt[10];                            //全局变量 定义在这是因为既要出现在函数中又要出现在main中
//
// void solve(int n) {
//     if (n == 0) {
//         cnt[0]++;
//     }
//     while (n) {//若n=0,程序不会执行
//         int t = n % 10;                 //取n的最后一位
//         cnt[t]++;                       //该数字出现次数加一
//         n /= 10;
//     }
// }
//
// int main() {
//     int l,r;
//     cin >> l >> r;
//     for (int i = l;i <= r;i++) solve(i);//遍历区间内所有数字
//     for (int i = 0;i <= 9; i++)
//         cout<<i<<" appear :"<<cnt[i]<<"\n";
// return 0;
// }

// #include<stdio.h>
// int main(){
//     int n,i=0,t;
//     scanf("%d",&n);
//     int arr[n];
//     for(i;i<=n;i++){
//         arr[i]=i+1;
//     }
//         i=1;
//     while(i<n){
//         t=n%i;
//         if(t==arr[i]){
//             printf("%d ",i);
//         }
//         i++;
//     }
//
//     return 0;
// }


// #include<iostream>
// using namespace std;
//
// int main() {
//     int n;
//     cout<<"Enter the number of arr ";
//     cin>>n;
//
//     int* arr = new int[n];
//
//     // 3. 输入数组元素
//     cout << "请输入" << n << "个整数：" << endl;
//     for (int i = 0; i < n; i++) {
//         cin >> arr[i];
//     }
//
//     // 4. 打印数组元素
//     cout << "您输入的数组为：";
//     for (int i = 0; i < n; i++) {
//         cout << arr[i] << " ";
//     }
//     cout << endl;
//
//     // 5. 释放动态内存
//     delete[] arr;
//
//     return 0;
// }


//二分  O(n+mlogn)
// #include<iostream>
// using namespace std;
//
// const int MAXN = 1e6 +5;
// int a[MAXN];
// int n,m;
//
// int binarySearch(int q) {
//     int left = 0,right = n-1;
//     int ans = -1;
//     while (left <= right) {
//         int mid = (left + right) / 2;
//         if (a[mid] == q) {
//             ans = mid;
//             right = mid - 1; // 左移右边界，搜索左半区间 根据数学原理可知这里的右边界可以直接左移
//         }
//         else if (a[mid] < q) {
//             left = mid + 1;
//         }
//         else {
//             right = mid - 1;
//         }
//     }
//     return ans;
// }
//
// int main() {
//     cin >> n >> m;
//     for (int i = 0;i < n;i++) {
//         cin>>a[i];
//     }
//     while (m--) {
//         int q;
//         cin>>q;
//         cout<<binarySearch(q)<<endl;
//     }
//     return 0;
// }




// void find(int n , int f)//f是待查询的数字
// {
//     if( n == f) cout<<n<<endl;
//     else cout<<"-1"<<endl;
// }

// bool find(int arr[] , int len , int target)
// {
//     for(int i = 0 ; i < len ; i++) {
//         if(arr[i] == target)   return true;
//     }
//     return false;
// }
//
// int n,m;
// int main() {
//     cin>>n>>m;//n:数字个数 m:查询数
//     int *arr = new int[n];//申请的范围是[0,n-1]
//     for(int i = 0;i < n;i++)
//     {
//         cin>>arr[i];
//     }//输入数字个数
//
//
//     for(int i = 1;i <= m;i++) {
//         if (find(arr,n,i)) {
//             cout<<i<<endl;
//         }
//         else {
//             cout<<"-1"<<endl;
//         }
//     }
//     return 0;
// }


// #include<stdio.h>
//
// void solve()
// {
//     for(int i = 200;i < 3001;i++)
//     {
//         int ge = i%10 , shi = (i/10)%10 , bai = (i/100)%10 ,qian = i/1000;
//         if(i<1000)
//         {
//             if(ge == bai) printf("%d ",i);
//         }
//         else
//         {
//             if(ge == qian) {
//                 if (bai==shi) printf("%d ",i);
//             }
//         }
//     }
// }
// int main() {
//     solve();
//     return 0;
// }


//阶乘计算s=1! + 2! + .... + n!
// #include<stdio.h>
// /*********Begin*********/
// long long ret(int n)
// {
//     long long t=0,tem=1;
//     for(int i = 1;i <= n;i++)
//     {
//         tem *= i;
//         t += tem;
//     }
//     return t;
// }
// /*********End**********/
// int main(void)
// {
//     /*********Begin*********/
//     int n;
//     scanf("%d",&n);
//     long long x = ret(n);
//     printf("%lld",x);
//     /*********End**********/
//     return 0;
// }

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;

float avar(float a[],int n)
{
    float sum=0,avar=0;
    for (int i = 0; i < n; i++)
    {
        sum += a[i];
    }
    return avar = sum / n;
}

int main()
{
    int N;
    scanf("%d", &N);
    float fen[N];
    for (int i = 0; i < N; i++)
    {
        scanf("%f", &fen[i]);
    }
    sort(fen, fen + N);
    for (int i = 0; i < N; i++)
    {
        fen[i] = fen[i + 1];
    }
    fen--;
    int sz1 = sizeof(fen) / sizeof(fen[0]);
    for (int i = 0; i < sz1; i++)
    {
        printf("%f ", fen[i]);
    }
    printf("\n");
    fen--;
    int sz2 = sizeof(fen) / sizeof(fen[0]);
    for (int i = 0; i < sz2; i++)
    {
        printf("%f ", fen[i]);

    }
    return 0;
}